﻿using SuperSocket.SocketBase;
using SuperSocket.SocketEngine;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Ruanmou.SocketService
{
    public class SuperSocketMain
    {
        /// <summary>
        /// 能听到老师讲话  能看到老师屏幕的  刷个1
        /// 
        /// SuperSocket：比较轻量级  支持中文官网  跨平台  不用感觉Socket
        /// 
        /// 1 SuperSocket引入和使用
        /// 2 聊天室之用户登录&唯一登陆
        /// 3 在线发消息&确认收到&离线消息
        /// 4 心跳检测机制&断线重连
        /// 5 CommandFilterAttribute的AOP机制 
        /// 
        ///  SuperSoket:
        ///     Session: 每一个用户连接就是一个Session
        ///     AppServer: Socket服务器实例
        ///     Commands: 客户端向服务器发送消息的命令集合 
        ///                  指令名称-空格-参数0-空格-参数1... + \r\n
        ///     
        /// 心跳包还是发消息:
        ///     检测客户端是否掉线，客户端在线，间隔固定时间给服务器发送一个消息，服务器马上回复一条消息，如果10s 接受不到服务器发送的消息，服务器就认为你下线
        /// 断线重连机制：
        ///     如果客户端发现自己掉线了，得重新连上去 
        ///     可以过几秒钟以后重新连接一次
        ///     
        ///    
        /// 
        /// 
        /// </summary>
        public static void Init()
        {
            try
            {
                //支持通过配置文件读取对服务启动 
                IBootstrap bootstrap = BootstrapFactory.CreateBootstrap();
                if (!bootstrap.Initialize())
                {
                    Console.WriteLine("初始化失败");
                    Console.ReadKey();
                    return;
                }
                Console.WriteLine("准备启动服务");
                var result= bootstrap.Start();

                foreach (var server in bootstrap.AppServers)
                {
                    if (server.State == ServerState.Running)
                    {
                        Console.WriteLine($"{server.Name}运行中");
                    }
                    else
                    {
                        Console.WriteLine($"{server.Name}启动失败");
                    }
                }


            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
            Console.Read();
        }
    }
}
